package main

/*
* Content: goroutine加锁 同步锁 读写锁
* --------------------------------------------------
* 什么时候用Goroutine？什么时候用Channel？: https://juejin.cn/post/6943952470993272845
 */

import (
	"fmt"
	"sync"
)

// 全局变量
var x int64

// 添加同步锁
var wg sync.WaitGroup

// 添加互斥锁
var lock sync.Mutex

func MyWaitLock() {

	// goroutine加锁 同步锁 读写锁
	fmt.Println("--------------------goroutine加锁 同步锁 读写锁-------------------")

	wg.Add(2)

	go add3()
	go add3()

	wg.Wait() // 等待: 同步机制
	fmt.Println(x)

}

func add3() {
	for i := 0; i < 5000; i++ {

		lock.Lock() //加锁
		x = x + 1
		lock.Unlock() //解锁

	}
	wg.Done() // 调用的函数里必须有 wg.Done()。wg.Add() 是在函数调用之前设置的
}
